	let max_particles    = 100;
		let particles        = [];
		let frequency        = 100;
		let init_num         = max_particles;
		let max_time         = frequency*max_particles;
		let time_to_recreate = false;

		// Enable repopolate
		setTimeout(function(){
		  time_to_recreate = true;
		}.bind(this), max_time)

		// Popolate particles
		popolate(max_particles);

		var tela = document.createElement('canvas');
		    tela.width = $(window).width();
		    tela.height = $(window).height();
		    $("body").append(tela);

		var canvas = tela.getContext('2d');

		class Particle{
		  constructor(canvas, options){
		    let colors = ["#feea00","#a9df85","#5dc0ad", "#ff9a00","#fa3f20"]
		    let types  = ["full","fill","empty"]
		    this.random = Math.random()
		    this.canvas = canvas;
		    this.progress = 0;

		    this.x = ($(window).width()/2)  + (Math.random()*200 - Math.random()*200)
		    this.y = ($(window).height()/2) + (Math.random()*200 - Math.random()*200)
		    this.w = $(window).width()
		    this.h = $(window).height()
		    this.radius = 1 + (8*this.random)
		    this.type  = types[this.randomIntFromInterval(0,types.length-1)];
		    this.color = colors[this.randomIntFromInterval(0,colors.length-1)];
		    this.a = 0
		    this.s = (this.radius + (Math.random() * 1))/10;
		    //this.s = 12 //Math.random() * 1;
		  }

		  getCoordinates(){
		    return {
		      x: this.x,
		      y: this.y
		    }
		  }

		  randomIntFromInterval(min,max){
		      return Math.floor(Math.random()*(max-min+1)+min);
		  }

		  render(){
		    // Create arc
		    let lineWidth = 0.2 + (2.8*this.random);
		    let color = this.color;
		    switch(this.type){
		      case "full":
		        this.createArcFill(this.radius, color)
		        this.createArcEmpty(this.radius+lineWidth, lineWidth/2, color)
		      break;
		      case "fill":
		        this.createArcFill(this.radius, color)
		      break;
		      case "empty":
		        this.createArcEmpty(this.radius, lineWidth, color)
		      break;
		    }
		  }

		  createArcFill(radius, color){
		    this.canvas.beginPath();
		    this.canvas.arc(this.x, this.y, radius, 0, 2 * Math.PI);
		    this.canvas.fillStyle = color;
		    this.canvas.fill();
		    this.canvas.closePath();
		  }

		  createArcEmpty(radius, lineWidth, color){
		    this.canvas.beginPath();
		    this.canvas.arc(this.x, this.y, radius, 0, 2 * Math.PI);
		    this.canvas.lineWidth = lineWidth;
		    this.canvas.strokeStyle = color;
		    this.canvas.stroke();
		    this.canvas.closePath();
		  }

		  move(){

		    this.x += Math.cos(this.a) * this.s;
		    this.y += Math.sin(this.a) * this.s;
		    this.a += Math.random() * 0.4 - 0.2;

		    if(this.x < 0 || this.x > this.w - this.radius){
		      return false
		    }

		    if(this.y < 0 || this.y > this.h - this.radius){
		      return false
		    }
		    this.render()
		    return true
		  }

		  calculateDistance(v1, v2){
		    let x = Math.abs(v1.x - v2.x);
		    let y = Math.abs(v1.y - v2.y);
		    return Math.sqrt((x * x) + (y * y));
		  }
		}
				/*
		 * Function to clear layer canvas
		 * @num:number number of particles
		 */
		function popolate(num){
		  for (var i = 0; i < num; i++) {
		   setTimeout(
		     function(x){
		       return function(){
		         // Add particle
		         particles.push(new Particle(canvas))
		       };
		     }(i)
		     ,frequency*i);
		  }
		  return particles.length
		 }

		function clear(){
		  // canvas.globalAlpha=0.04;
		  canvas.fillStyle='#111111';
		  canvas.fillRect(0, 0, tela.width, tela.height);
		  // canvas.globalAlpha=1;
		}

		function connection(){
		  let old_element = null
		  $.each(particles, function(i, element){
		    if(i>0){
		      let box1 = old_element.getCoordinates()
		      let box2 = element.getCoordinates()
		      canvas.beginPath();
		      canvas.moveTo(box1.x,box1.y);
		      canvas.lineTo(box2.x,box2.y);
		      canvas.lineWidth = 0.45;
		      canvas.strokeStyle="#3f47ff";
		      canvas.stroke();
		      canvas.closePath();
		    }

		    old_element = element
		  })
		}

		/*
		 * Function to update particles in canvas
		 */
		function update(){
		  clear();
		  connection()
		  particles = particles.filter(function(p) { return p.move() })
		  // Recreate particles
		  if(time_to_recreate){
		    if(particles.length < init_num){ popolate(1);}
		  }
		  requestAnimationFrame(update.bind(this))
		}

		update()